package cn.Liujialin.org.controller;


import cn.Liujialin.basic.util.AjaxResult;
import cn.Liujialin.basic.util.PageList;
import cn.Liujialin.user.mapper.Log;
import cn.Liujialin.org.domain.Employee;
import cn.Liujialin.org.query.EmployeeQuery;
import cn.Liujialin.org.service.IEmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

//现在Controller为借口，只能返回数据，不能在返回当前页面，最好使用Restful规范
//Restful规范：要求用json格式来传递，放入请求体 不在放入请求头
//注意借口三要素：url 请求参数 返回值
@RestController// =  ResponseBody+Controller
@RequestMapping("/emp")
public class EmployeeController {

    @Autowired
    private IEmployeeService employeeService;

    //查询单个
    @Log("查询单个")
    @GetMapping("/id")//   http://localhost:8080/dept/1  等 发送的get请求 传一个ID
    public Employee ById(@PathVariable("id") Long id){

        return  employeeService.findById(id);
    }
    //查询所有    注意：同一个类中不能有相同的GetMapping地址 【是相同的地址】
    @Log("查询")
    @GetMapping   //  http://localhost:8080/dept/  查询所有就不用传递ID过来

    public List<Employee>  ByAll(){
        return employeeService.findByAll();
    }

    //分页和高级查询
    @Log("分页/高级查询")
    @PostMapping ///   http//localhost:8080/dept/
    //因为浏览器只能发送GET请求 所以Post等请求无法搞定,@RequestBody 是 RestFul特有注解
    // @RequestBody（@PathVariable）主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的)；
    public PageList<Employee> queryPage(@RequestBody EmployeeQuery query){
        return  employeeService.queryPage(query);
    }

    //新增和修改   put
    @Log("添加/修改")
    @PutMapping
    public AjaxResult addOrUpdate(@RequestBody Employee employee){
        try {
            if(employee.getId() == null){
                employeeService.save(employee);
            }else{
                employeeService.update(employee);
            }
            return AjaxResult.me();
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.fail("操作失败！");
        }
    }

    /**
     * 写接口的三要素：
     *   1.请求的地址是什么   http://localhost:8080/dept/1  delete
     *   2.请求的参数是什么  /{id}
     *   3.返回值是什么  AjaxResult
     * @param id
     */
    //删除   delete
    @Log("删除")
    @DeleteMapping("/{id}")//使用{} 占位  //http://localhost:8080/dept/1
    public AjaxResult deleteById(@PathVariable("id") Long id){
        //ctrl + alt + t
        /* 很low
        try {
            employeeService.delete(id);
            return new AjaxResult();
        } catch (Exception e) {
            e.printStackTrace();
            return new AjaxResult(false,"删除失败！");
        }*/

        // 高级技师玩法
        try {
            employeeService.del(id);
            return AjaxResult.me();
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.fail("删除失败！");
        }
    }
    /**
     * 如果前端传递的是数组，后端可以使用List 或者 数组接收
     * @return
     */
    @Log("批量删除")
    @PatchMapping  //http://localhost:8080/dept
    public AjaxResult patchDelete(@RequestBody List<Long> ids){
        try {
            employeeService.patchDelete(ids);
            return AjaxResult.me();
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.fail("删除失败！");
        }
    }

}
